/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package estacionamento;
/**
 *
 * @author Pedro
 */
import java.util.Scanner;

public class Estacionamento {
   

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        //Criar variavel para passar texto
      
        
        //criar scanner
        Scanner user_input = new Scanner(System.in);
        
        //Criar array para as matriculas
        String[] matLugares = new String[100];
        
        //repetir o programa atÃ© o utilizador desejar
        boolean sair = false;
        while (sair == false) //verificar se o utilizador jÃ¡ desejou sair
        {
            //perguntar ao utilizador o que quer fazer
            System.out.println("O que é que deseja fazer?");
            System.out.println("1 - Inserir registo");
            System.out.println("2 - Apagar registo");
            System.out.println("3 - Apagar todos os registos");
            System.out.println("4 - Editar a Matricula");
            System.out.println("5 - Listar todas as matriculas");
            System.out.println("6 - Procurar lugar por matricula");
            System.out.println("7 - Listar todos os lugares ocupados/livres");
            System.out.println("8 - Verificar se a matricula se encontra no parque e qual o seu lugar");
            System.out.println("9 - Apagar matricula por matricula");
            System.out.println("0 - Sair");

            int resposta = user_input.nextInt();

            //verificar resposta
            if (resposta == 1) //ver se há a resposta 1 (Inserir Registo)
            {
                //pedir para inserir o numero do lugar
                System.out.println("Insira o lugar onde está estacionado o carro (De 1 a 100): " );
                int lugar = user_input.nextInt();
                              
                //verificar se lugar escolhido está ocupado ou não
                if (matLugares[lugar - 1] == null)
                {
                    //pedir para inserir a matricula
                    System.out.println("Insira a matricula do carro: ");
                    String matricula = user_input.next();
                    
                    //verificar se matricula já existe
                    int verLugar = Estacionamento.CompStrings(matricula, matLugares); 
                    
                    if (verLugar != 0) //se existir
                    {
                        System.out.println("Já se encontra no parque um carro com essa matricula, no lugar " + verLugar);
                        
                    }
                    else //se nao existir
                    {
                        matLugares[lugar - 1] = matricula;
                    }
                    
                }
                else //se o lugar estiver ocupado
                {
                       //mostrar
                    System.out.println("O lugar está ocupado!");
                    
                }
            }
            else if (resposta == 2) //Apagar Registo
            {
                //pedir o lugar
                System.out.println("Insira o lugar cujo registo deseja apagar:");
                int registo = user_input.nextInt();
                
                //criar ciclo de verificação
                boolean valido = false;
                
                while (valido == false) //verificar se a resposta foi valida
                {
                    System.out.println("Deseja mesmo apagar este registo? (s/n)"); //confirmar se utilizador deseja apagar registo
                    String resp = user_input.next();

                     //verificar resposta
                    if (resp.equals("s")) //resposta positiva
                    {
                        matLugares[registo - 1] = null; //apagar registo
                        valido = true; //validar resposta
                        System.out.println("O registo foi apagado.");
                    }
                    else if (resp.equals("n")) //resposta negativa
                    {
                        valido = true; //validar resposta
                        System.out.println("Operação cancelada.");
                    }
                    else //resposta incompativel
                    {
                        System.out.println("Resposta inválida.");
                        valido = false; //nao validar resposta
                    }
                        
                        
                 }
              }
            else if(resposta == 3) //Apagar todos os registos
            {
                    boolean valido = false; //variavel para sair do ciclo while
                    while (valido == false) //ciclo while para confirmar a opção de apagar todos os registos
                    {                       // e apagar os mesmos    
                        System.out.println("Apagar os valores todos? s/n");
                    String resp = user_input.next();

                   if(resp.equals("s")) //ciclo if para confirmar a resposta dada pelo utilizador
                       {
                    matLugares = new String[matLugares.length];
                    valido = true;
                    System.out.println("Registos apagados");
                       }
                   else if(resp.equals("n"))
                   {
                       valido = true;
                       System.out.println("Operação cancelada");

                   }
                   else
                   {
                   System.out.println("Operação Invalida!");
                   valido = false;

                   }
                }
            }
            else if(resposta == 4){//Editar matricula
                 
                System.out.println("Insira o lugar do seu carro");
                int lugar = user_input.nextInt();   //input do utilizador(Inserir lugar)
                System.out.println("O lugar " + lugar + " tem a matricula " + matLugares[lugar-1] );
                System.out.println("O Insira a matricula que deseja");
               String altMatric = user_input.next();    //input do utilizador(editar matricula)
               matLugares[lugar-1] = altMatric;     //input do utilizador usado para modificar a matricula já imposta
               System.out.println("a nova matricula é " + altMatric);                
         
            }
           
            else if(resposta == 5){ //Listar lugares ocupados
               
                for(int x = 0;x<100;x++ ){  //ciclo for para listar todos os lugares ocupados
                    if(matLugares[x] == null)
                    {
                         System.out.print("");
                    }
                    else{
                        int sitio = x + 1;  //variavel para expecifcar o lugar ocupado
                        System.out.println("O carro no lugar " + sitio + " tem a matricula : " + matLugares[x]);
                        
                    }
                }
            }
            else if(resposta ==6){ //Procurar lugar por matricula
                //O utilizador ira inserir a matricula que deseja encontrar
                String procurar;

                Scanner sc= new Scanner(System.in);

                System.out.println("Inserir matricula");

                procurar = sc.next();

                for(int x=0;x<100;x++){// este ciclo for ira verificar nos 100 lugares se existe uma matricula igual a que o utilizador meteu

                            

                if(procurar.equals(matLugares[x])){
                    int sitio = x + 1;
                    System.out.println("A matricula " + matLugares[x] + " ocupa o lugar " + sitio);
                        }
                    else if(!procurar.equals(matLugares[x])){

                    System.out.print(""); 
                                    }

                 }
            }
            else if(resposta == 7)//Listar todos os lugares ocupados/livres
            {
                //este if tem como função contar os lugares livres e ocupados usando um for para fazer de contador para poder atribuir os lugares
                int livre = 0;
                int ocupado = 0;
                for(int x =0;x<100;x++){
                    if(matLugares[x] == null)
                    {
                        livre++;
                    }
                    else{
                        ocupado++;
                    }
                }
                System.out.println("O parque tem  " + livre + " lugares livres e tem " + ocupado + " lugares ocupados");
            }
            
            else if(resposta == 8)//Verificar se a matricula se encontra no parque e qual o seu lugar
            {
                //O utilizador insere a matricula que deseja verificar se esta no park e ira tambem divulgar o seu lugar com este ciclo for
                System.out.println("Insira a matricula:");
                String matricula = user_input.next();
                for (int x = 0; x < 100; x++) {
                    if (matricula.equals(matLugares[x])){
                        int sitio=x+1;
                        System.out.println("A matricula encontra-se no parque e no lugar " + sitio);
                        
                    }
                }
            }
            
            else if (resposta == 9) {//Apagar matricula por matricula
                //Neste if o utilizador vai inserir a matricula que deseja apagar e o ciclo for vai ver se algum dos lugares tem essa matricula guardada la dentro e vai comparar com a que o utilizador inseriou
                String matrint;
                String answer;
                Scanner newnew = new Scanner(System.in);
                Scanner rspt = new Scanner(System.in);
                System.out.println("Qual é a matricula que deseja apagar?");
                matrint = newnew.next();
                for (int x = 0; x < 100; x++) {
                    if (matrint.equals(matLugares[x])) {
                        System.out.println("deseja mesmo apagar este registo?(s/n)");
                        answer = rspt.next();
                        switch (answer) { 
                            case "s":
                                matLugares[x] = null;
                                System.out.println("Registo apagado");
                               // apagar = true;
                                break;
                            case "n":
                                System.out.println("Registo NAO apagado");
                                //apagar = true;
                                break;
                            default:
                                System.out.println("Resposta invalida.");
                                //apagar = false;
                                break;
                        }
                    }
                }
            }
         else if(resposta == 0) //Sair
            {
                sair = true; //O utilizador desejou sair, esta variavel fica verdadeira
                
            }
            else
            {
                System.out.println("Opção inexistente, escolha novamente.");
                
            }
           
        
            
        
        }
        
        
        
        
        
    }
    
    //Esta rotina Compara uma string com uma lista de strings, e vÃª se jÃ¡ existe uma igual. Devolve 0 se nao encontrar
    static int CompStrings (String objecto, String[] Lista) {
    
        boolean isExiste = false; //esta variavel verifica se a string existe ou nao
        int numero = 0; //esta variavel conta o numero de repetiÃ§Ãµes
        
        //lÃª por todos os elementos da lista
        for (String x : Lista)
        {
            if(isExiste == false) //verifica se o objeto ja foi descoberto
            {
            numero++; //adiciona uma repetiÃ§Ã£o
                if (x == null ? objecto == null : x.equals(objecto)) //compara o elemento currente da lista com o objeto
                {

                    isExiste = true; //se sim, existe
                }
            }
            
        }
        
        //caso nÃ£o exista, meter numero = 0;
        if(isExiste == false)
        {
            numero = 0;
        }
        
        return numero;
        
    }
}

